# @Time    : 2022/9/15 8:29
# @Author  : 南黎
# @FileName: 0.数据处理.py
import numpy as np
import pandas as pd

def load_data():
    # 从文件导入数据
    datafile = 'boston.csv'
    data = pd.read_csv(datafile)  #
    feature_names = list(data.columns)  # 获取列名
    data = data.values  # .values转为np数组

    # 每条数据包括14项，其中前面13项是影响因素，第14项是相应的房屋价格中位数
    feature_names = [ 'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', \
                      'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV' ]
    feature_num = len(feature_names)

    # 将原数据集拆分成训练集和测试集
    # 这里使用80%的数据做训练，20%的数据做测试
    # 测试集和训练集必须是没有交集的
    ratio = 0.8
    offset = int(data.shape[0] * ratio)
    training_data = data[:offset]#得到分割的训练集 80%

    # 计算训练集的最大值，最小值，平均值
    maximums, minimums, avgs = training_data.max(axis=0), training_data.min(axis=0), \
                               training_data.sum(axis=0) / training_data.shape[0]

    # 对数据进行归一化处理
    for i in range(feature_num):
        #print(maximums[i], minimums[i], avgs[i])
        data[:, i] = (data[:, i] - minimums[i]) / (maximums[i] - minimums[i])

    # 训练集和测试集的划分比例
    training_data = data[:offset]
    test_data = data[offset:]
    return training_data, test_data


training_data, test_data=load_data()
#这里其实我不需要导出dat文件,我一般比较喜欢用csv，可能大数据量的话，dat文件会好一点吧
#在网上是在是找不到相关的python使用dat文件做模型的学习资源，也不知道这样转对不对
pd.DataFrame(training_data,index=None,columns=None).to_csv('training_data.dat')
pd.DataFrame(test_data).to_csv('test_data.dat')